123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import abc
- from pip._vendor.six import add_metaclass
- from pip._internal.utils.typing import MYPY_CHECK_RUNNING
- if MYPY_CHECK_RUNNING:
- from typing import Optional
- from pip._vendor.pkg_resources import Distribution
- from pip._internal.req import InstallRequirement
- from pip._internal.index.package_finder import PackageFinder
- @add_metaclass(abc.ABCMeta)
- class AbstractDistribution(object):
- """A base class for handling installable artifacts.
- The requirements for anything installable are as follows:
- - we must be able to determine the requirement name
- (or we can't correctly handle the non-upgrade case).
- - for packages with setup requirements, we must also be able
- to determine their requirements without installing additional
- packages (for the same reason as run-time dependencies)
- - we must be able to create a Distribution object exposing the
- above metadata.
- """
- def __init__(self, req):
- # type: (InstallRequirement) -> None
- super(AbstractDistribution, self).__init__()
- self.req = req
- @abc.abstractmethod
- def get_pkg_resources_distribution(self):
- # type: () -> Optional[Distribution]
- raise NotImplementedError()
- @abc.abstractmethod
- def prepare_distribution_metadata(self, finder, build_isolation):
- # type: (PackageFinder, bool) -> None
- raise NotImplementedError()
|